﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
using WebAppPlanProduccion.Code.Contracts;
using Web.Framework.Controls;
using WebAppPlanProduccion.Code;
using PlanProd.Contracts;
using WebAppPlanProduccion.Code.InnerClasses;
using PlanProd.Contracts.enums;
using System.Web;
using Web.Framework.Svc;
using Web.Framework;

namespace WebAppPlanProduccion.Svc
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Planning
    {
        private WebServiceHelper GetWebServiceHelper()
        {
            WebServiceHelper webServiceHelper = new Code.WebServiceHelper();
            webServiceHelper.ServiceOptionsDefault = new ServiceOptions();
            webServiceHelper.ServiceOptionsDefault.UserName = HttpContext.Current.User.Identity.Name;
            return webServiceHelper;
        }

        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public List<Producto> SearchProduct(string codigoProducto, string descripcionProducto, int presupuestoProduccionId, int temporadaId)
        {
            List<Producto> productos = GetWebServiceHelper().GetProductosForPresupuesto(codigoProducto, descripcionProducto, presupuestoProduccionId, temporadaId);
            return productos;
        }

        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public string UpdateProducts(int planProdId, List<PlanProdCtrlUpdates> updates, List<int> removedIds)
        {
            // Hay que hacer la traducción de números de semana
            WebServiceHelper webServiceHelper = GetWebServiceHelper();

            var presupuesto = webServiceHelper.GetPresupuestosDeProduccion(webServiceHelper.ServiceOptionsDefault, planProdId, string.Empty, null, null, null, null, null, null).SingleOrDefault();
            Temporada temporada = webServiceHelper.GetTemporadaById(presupuesto.TemporadaId);
            // Traduzco orden a nuemro de semana
            System.Collections.Specialized.HybridDictionary hdictionary = temporada.GetHybridOrdenNumeroSemana();

            List<UpdateCantidadPlanProd> updateList = (from u in updates
                                                       select new UpdateCantidadPlanProd()
                                                       {
                                                           Id = u.Id,
                                                           ProductoId = u.ProductoId,
                                                           NumeroSemana = Convert.ToInt32(hdictionary[u.NumeroSemana]),                                                          
                                                           Cantidad = u.Cantidad
                                                       }).ToList();            
          
            webServiceHelper.UpdatePresupuestoProduccionItems(planProdId, updateList, removedIds);

            return "Productos Actualizados";
        }

        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public string GuardarDesviosMasivos(int tipoDesvioInt, int causaDesvioId, int planProdId, List<DesvioProductoSemana> desvioProductoSemanaList)
        {
            string returnMessage = "Metodo obsoleto";//"Desvios Guardados";
            //try
            //{               
            //    CargarDesviosMasivos(false, BaseWebPage.UserName, tipoDesvioInt, causaDesvioId, planProdId, desvioProductoSemanaList);
            //}
            //catch (Exception ex)
            //{
            //    returnMessage = ex.Message;
            //}
            return returnMessage;          
        }

        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public string AprobarDesviosMasivos(int tipoDesvioInt, int causaDesvioId, int planProdId, List<DesvioProductoSemana> desvioProductoSemanaList)
        {
            string returnMessage = "Metodo obsoleto";//"Desvios aprobados";
            //try
            //{               
            //    CargarDesviosMasivos(true, BaseWebPage.UserName, tipoDesvioInt, causaDesvioId, planProdId, desvioProductoSemanaList);
            //}
            //catch (Exception ex)
            //{
            //    returnMessage = ex.Message;
            //}

            return returnMessage;
        }

        public void CargarDesviosMasivos(bool aprobar, string userName, int tipoDesvioInt, int causaDesvioId, int planProdId, List<DesvioProductoSemana> desvioProductoSemanaList)
        {
            //WebServiceHelper webServiceHelper = GetWebServiceHelper();
            //TipoDesvio tipoDesvio = (TipoDesvio)tipoDesvioInt;

            //PlanProduccion planProduccion = webServiceHelper.GetPlanProduccionById(planProdId);            

            //List<Desvio> desvios = MiscHelper.CargarDesvios(userName, tipoDesvio, causaDesvioId, planProduccion, desvioProductoSemanaList);
            //List<Desvio> desvioResult;

            //if (aprobar)
            //{
            //    desvioResult = webServiceHelper.SaveYAprobarDesvioMasivo(desvios, userName, EstadoCharAprobado.Aprobado);
            //}
            //else
            //{
            //    desvioResult = webServiceHelper.SaveDesvioMasivo(desvios);
            //}
        }      
    }
}
